package offer.offer04;

/**
 * 又是一个位运算, 第一次直接看答案。
 * 循环判断 b!=0, 因为当b为0时, a = a + b了。
 * 非进位和+进位, 不要推直接看文字描述。
 */
public class S65不用加减乘除做加法 {
    public int add(int a, int b) {
        while(b != 0) { // 当进位为 0 时跳出
            int c = (a & b) << 1;  // c = 进位
            a ^= b; // a = 非进位和, 异或
            b = c; // b = 进位
        }
        return a;
    }
}
